package br.eng.eliseu.gwt.gestaoWeb.client.ui;

import br.eng.eliseu.gwt.gestaoWeb.client.mvp.presenter.Presenter;
import br.eng.eliseu.gwt.gestaoWeb.client.ui.sistema.CadastroBancoPresenter;
import br.eng.eliseu.gwt.gestaoWeb.client.ui.sistema.HomeSistemaPresenter;
import br.eng.eliseu.gwt.gestaoWeb.client.ui.sistema.MenuSistemaPresenter;
import br.eng.eliseu.gwt.gestaoWeb.client.ui.sistema.configuracoes.PerfilUsuarioPresenter;
import br.eng.eliseu.gwt.gestaoWeb.client.ui.site.cadastro.PrimeiroCadastroPresenter;
import br.eng.eliseu.gwt.gestaoWeb.client.ui.site.login.LoginPresenter;
import br.eng.eliseu.gwt.gestaoWeb.client.ui.site.main.CabecalhoPresenter;
import br.eng.eliseu.gwt.gestaoWeb.client.ui.site.main.ContatoPresenter;
import br.eng.eliseu.gwt.gestaoWeb.client.ui.site.main.HomePresenter;
import br.eng.eliseu.gwt.gestaoWeb.client.ui.site.main.MenuSitePresenter;
import br.eng.eliseu.gwt.gestaoWeb.client.ui.site.main.RodapePresenter;


public enum PresenterMenuEnum  {
	/* Tabela definida com 254 caracteres
	 */
	
	// --- Telas fora do Menu
	CABECALHO(null, null, null, null, LocalDestino.TOPO, CabecalhoPresenter.class, "Cabecalho", null, false),
	RODAPE(null, null, null, null, LocalDestino.RODAPE, RodapePresenter.class, "Rodape", null, false),
	LOGIN(null, null, null, null, LocalDestino.CENTRO, LoginPresenter.class, "Entrar", "login", false),
	CADASTROGRATIS(null, null, null, null, LocalDestino.CENTRO, PrimeiroCadastroPresenter.class, "Cadastro Gratis", "cadastroGratis", false),

	// --- Telas do MenuSite ID [01..09]
	MENUSITE(null, null, null, null, LocalDestino.MENUSITE, MenuSitePresenter.class, "Menu", null, false),
	HOME				(  00,   01, Menu.SITE, TipoMenu.ITEM, LocalDestino.CENTRO, HomePresenter.class, "Home", "home", false),
	CONTATO				(  00,   03, Menu.SITE, TipoMenu.ITEM, LocalDestino.CENTRO, ContatoPresenter.class, "Contato", "contato", false),
	
	// --- Telas do MenuSistema ID [10..99]
	MENUSISTEMA(null, null, null, null, LocalDestino.MENUSISTEMA, MenuSistemaPresenter.class, "Menu", null, false),
	HOMESISTEMA			(  00,   10, Menu.SISTEMA, TipoMenu.ITEM, LocalDestino.CENTRO, HomeSistemaPresenter.class, "Resumo do Dia", "homeSistema", true),
	CADASTRO			(  00,   20, Menu.SISTEMA, TipoMenu.POPUP, null, null, "Cadastro", null, false),
		CAD_BANCOS		(  20, 2001, Menu.SISTEMA, TipoMenu.ITEM, LocalDestino.CENTRO, CadastroBancoPresenter.class, "Bancos", "cadbancos", true),
		CAD_FORNECEDOR	(  20, 2002, Menu.SISTEMA, TipoMenu.ITEM, null, null, "Fornecedores", "cadFornecedores", true),
	CONFIGURACOES		(  00,   90, Menu.SISTEMA, TipoMenu.POPUP, null, null, "Configuracoes", null, false),
		PERFILUSUARIO	(  90, 9001, Menu.SISTEMA, TipoMenu.ITEM, LocalDestino.CENTRO, PerfilUsuarioPresenter.class, "Perfil do Usuário", "perfilUsuario", true),

	;
	
	public enum Menu { SITE, SISTEMA };
	public enum TipoMenu { POPUP, ITEM };
	public enum LocalDestino { TOPO, MENUSITE, MENUSISTEMA, CENTRO, RODAPE };
	
	private Integer parentId; 
	private Integer id;
	private Menu menu;
	private TipoMenu tipoMenu;
	private LocalDestino local;
	private Class<? extends Presenter> presenter;
	private String nome;
	private String tagNome;
	private Boolean requerAutenticacao;
	
	private PresenterMenuEnum(Integer parentId, Integer id, 
			Menu menu, TipoMenu tipoMenu, LocalDestino local, 
			Class<? extends Presenter> presenter, String nome, String tagNome, Boolean requerAutenticacao) {
		this.parentId = parentId;
		this.id = id;
		this.menu = menu;
		this.tipoMenu = tipoMenu;
		this.local = local;
		this.presenter = presenter;
		this.nome = nome;
		this.tagNome = tagNome;
		this.requerAutenticacao = requerAutenticacao; 
	}
	
	/**
	 * Retorna um vetor com os PresenterCodeEnum que PODEM APARECER NO MENU
	 * @return
	 */
//	public static PresenterCodeEnum[] valuesMenu() {
//		PresenterCodeEnum[] values = new PresenterCodeEnum[values().length];
//		int i=0;
//		for (PresenterCodeEnum item : PresenterCodeEnum.values()) {
//			if(item!=null && item.getTipoMenu()!=null){
//				values[i++] = item;
//			}
//		}
//		return values;
//	}

	
	
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public Integer getParentId() {
		return parentId;
	}
	public void setParentId(Integer parentId) {
		this.parentId = parentId;
	}
	public Integer getCodigo() {
		return parentId * 1000 + id;
	}
	public Menu getMenu() {
		return menu;
	}
	public void setMenu(Menu menu) {
		this.menu = menu;
	}
	public TipoMenu getTipoMenu() {
		return tipoMenu;
	}
	public void setTipoMenu(TipoMenu tipoMenu) {
		this.tipoMenu = tipoMenu;
	}
	public LocalDestino getLocal() {
		return local;
	}
	public void setLocal(LocalDestino local) {
		this.local = local;
	}
	public void setPresenter(Class<? extends Presenter> presenter) {
		this.presenter = presenter;
	}
	public Class<? extends Presenter> getPresenter() {
		return presenter;
	}
	public String getPresenterName(){
		String nome = null;
		if (presenter!=null){
			nome = presenter.toString().replaceAll("class ", "");
		}
		return nome;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getTagNome() {
		return tagNome;
	}
	public void setTagNome(String tagNome) {
		this.tagNome = tagNome;
	}
	public Boolean getRequerAutenticacao() {
		return requerAutenticacao;
	}
	public void setRequerAutenticacao(Boolean requerAutenticacao) {
		this.requerAutenticacao = requerAutenticacao;
	}
}